#include <stdio.h>  
#include <termios.h>  
#include <unistd.h>  
  
void set_raw_mode() {  
    struct termios raw;  
    tcgetattr(STDIN_FILENO, &raw);  
    raw.c_lflag &= ~(ECHO | ICANON);  // 关闭回显和规范模式  
    tcsetattr(STDIN_FILENO, TCSANOW, &raw);  
}  
  
void reset_mode() {  
    struct termios cooked;  
    tcgetattr(STDIN_FILENO, &cooked);  
    cooked.c_lflag |= (ECHO | ICANON);  // 恢复回显和规范模式  
    tcsetattr(STDIN_FILENO, TCSANOW, &cooked);  
}  
  
int getch() {  
    int ch;  
    set_raw_mode();  
    ch = getchar();  
    reset_mode();  
    return ch;  
}  
  
// int main() {  
//     char ch;  
//     printf("Press any key to see it (without Enter):\n");  
//     while (1) {  
//         ch = getch();  
//         if (ch == EOF) {  
//             break;  // 如果遇到文件结束符，退出循环  
//         }  
//         printf("You pressed: %c\n", ch);  
//     }  
//     return 0;  
// }